home *** CD-ROM | disk | FTP | other *** search
/ TeX 1995 July / TeX CD-ROM July 1995 (Disc 1)(Walnut Creek)(1995).ISO / tex-k / tex-k-archive.past / tex-k-archive.gz / tex-k-archive / 000295_simon@lia.di.epfl.ch_Wed Feb 9 10:45:39 1994.msg < prev    next >
Internet Message Format  |  1994-10-11  |  14KB

  1. Received: from liasun6.epfl.ch by cs.umb.edu with SMTP id AA23089
  2.   (5.65c/IDA-1.4.4 for <tex-k@cs.umb.edu>); Wed, 9 Feb 1994 10:45:39 -0500
  3. Received: by liasun6.epfl.ch (Smail3.1.28.1 #58)
  4.     id m0pUGqt-0002R9C; Wed, 9 Feb 94 16:29 MET
  5. Message-Id: <m0pUGqt-0002R9C@liasun6.epfl.ch>
  6. Date: Wed, 9 Feb 94 16:29 MET
  7. From: simon@lia.di.epfl.ch (Simon Leinen)
  8. To: tex-k@cs.umb.edu
  9. Subject: First hack at a Motif interface for xdvi
  10.  
  11. If you find that xdvi isn't ugly enough yet, you can apply this patch
  12. and recompile xdvi with -DHAVE_MOTIF (and preferably without
  13. -DBUTTONS).  You also need to link against -lXm.  Tested only on IRIX
  14. 5.1 (X11R5/Motif 1.2.2).
  15.  
  16. Have fun(???),
  17. -- 
  18. Simon.
  19.  
  20. *** xdvik/xdvi.c    1994/02/08 21:36:30    1.1
  21. --- xdvik/xdvi.c    1994/02/09 15:21:00
  22. ***************
  23. *** 96,104 ****
  24.   #define    XtSpecificationRelease    0
  25.   #endif
  26.   #if    XtSpecificationRelease >= 4
  27.   #include <X11/Xaw/Viewport.h>
  28.   #ifdef    BUTTONS
  29.   #include <X11/Xaw/Command.h>
  30. ! #endif
  31.   #else    /* XtSpecificationRelease < 4 */
  32.   #define    XtPointer caddr_t
  33. --- 96,113 ----
  34.   #define    XtSpecificationRelease    0
  35.   #endif
  36. + #ifdef  HAVE_MOTIF
  37. + #include <Xm/MainW.h>
  38. + #include <Xm/PushB.h>
  39. + #include <Xm/ToggleB.h>
  40. + #include <Xm/BulletinB.h>
  41. + #include <Xm/Form.h>
  42. + #include <Xm/RowColumn.h>
  43. + #include <Xm/MenuShell.h>
  44. + #else /* not HAVE_MOTIF */
  45.   #if    XtSpecificationRelease >= 4
  46.   #include <X11/Xaw/Viewport.h>
  47.   #ifdef    BUTTONS
  48.   #include <X11/Xaw/Command.h>
  49. ! #endif /* BUTTONS */
  50.   #else    /* XtSpecificationRelease < 4 */
  51.   #define    XtPointer caddr_t
  52. ***************
  53. *** 108,111 ****
  54. --- 117,121 ----
  55.   #endif
  56.   #endif    /* XtSpecificationRelease */
  57. + #endif /* not HAVE_MOTIF */
  58.   #else    /* !TOOLKIT */
  59.   #define    XtNumber(arr)    (sizeof(arr)/sizeof(arr[0]))
  60. ***************
  61. *** 319,322 ****
  62. --- 329,338 ----
  63.   #ifdef    TOOLKIT
  64.   static    Widget    top_level, vport_widget, draw_widget, clip_widget;
  65. + #ifdef HAVE_MOTIF
  66. + static    Widget    menubar;
  67. + static    Widget    scale_menu;
  68. + static    Widget    shrink_button[5];
  69. + static    unsigned max_shrink_button = 0;
  70. + #endif /* HAVE_MOTIF */
  71.   #ifdef    BUTTONS
  72.   static    Widget    form_widget, line_widget, panel_widget;
  73. ***************
  74. *** 325,328 ****
  75. --- 341,347 ----
  76.   
  77.   static    Arg    vport_args[] = {
  78. + #ifdef HAVE_MOTIF
  79. +   {XmNscrollingPolicy, (XtArgVal) XmAUTOMATIC},
  80. + #else /* not HAVE_MOTIF */
  81.   #ifdef    BUTTONS
  82.       {XtNborderWidth, (XtArgVal) 0},
  83. ***************
  84. *** 334,337 ****
  85. --- 353,357 ----
  86.       {XtNallowHoriz,    (XtArgVal) True},
  87.       {XtNallowVert,    (XtArgVal) True},
  88. + #endif /* not HAVE_MOTIF */
  89.   };
  90.   
  91. ***************
  92. *** 351,362 ****
  93.   #ifdef    BUTTONS
  94.   static    Arg    form_args[] = {
  95.       {XtNdefaultDistance, (XtArgVal) 0},
  96.   };
  97.   #define    XTRA_WID    79
  98.   
  99.   static    Arg    line_args[] = {
  100. -     {XtNbackground,    (XtArgVal) 0},
  101. -     {XtNwidth,    (XtArgVal) 1},
  102.       {XtNheight,    (XtArgVal) 0},
  103.       {XtNfromHoriz,    (XtArgVal) NULL},
  104.       {XtNborderWidth, (XtArgVal) 0},
  105. --- 371,390 ----
  106.   #ifdef    BUTTONS
  107.   static    Arg    form_args[] = {
  108. + #ifdef HAVE_MOTIF
  109. +     {XmNhorizontalSpacing, (XtArgVal) 0},
  110. +     {XmNverticalSpacing, (XtArgVal) 0},
  111. + #else /* not HAVE_MOTIF */
  112.       {XtNdefaultDistance, (XtArgVal) 0},
  113. + #endif /* not HAVE_MOTIF */
  114.   };
  115.   #define    XTRA_WID    79
  116.   
  117.   static    Arg    line_args[] = {
  118.       {XtNheight,    (XtArgVal) 0},
  119. + #ifdef HAVE_MOTIF
  120. +     {XmNleftWidget,    (XtArgVal) NULL},
  121. +     {XmNleftAttachment,    (XtArgVal) XmATTACH_WIDGET},
  122. +     {XmNresizable, (XtArgVal) False},
  123. + #else /* not HAVE_MOTIF */
  124.       {XtNfromHoriz,    (XtArgVal) NULL},
  125.       {XtNborderWidth, (XtArgVal) 0},
  126. ***************
  127. *** 365,371 ****
  128. --- 393,410 ----
  129.       {XtNleft,    (XtArgVal) XtChainRight},
  130.       {XtNright,    (XtArgVal) XtChainRight},
  131. +     {XtNbackground,    (XtArgVal) 0},
  132. +     {XtNwidth,    (XtArgVal) 1},
  133. + #endif /* not HAVE_MOTIF */
  134.   };
  135.   
  136.   static    Arg    panel_args[] = {
  137. + #ifdef HAVE_MOTIF
  138. +     {XmNleftWidget,    (XtArgVal) NULL},
  139. +     {XtNwidth,    (XtArgVal) (XTRA_WID - 1)},
  140. +     {XtNheight,    (XtArgVal) 0},
  141. +     {XtNborderWidth, (XtArgVal) 0},
  142. +     {XmNleftAttachment,    (XtArgVal) XmATTACH_WIDGET},
  143. +     {XmNresizable, (XtArgVal) False},
  144. + #else /* not HAVE_MOTIF */
  145.       {XtNfromHoriz,    (XtArgVal) NULL},
  146.       {XtNwidth,    (XtArgVal) (XTRA_WID - 1)},
  147. ***************
  148. *** 376,379 ****
  149. --- 415,419 ----
  150.       {XtNleft,    (XtArgVal) XtChainRight},
  151.       {XtNright,    (XtArgVal) XtChainRight},
  152. + #endif /* not HAVE_MOTIF */
  153.   };
  154.   
  155. ***************
  156. *** 406,415 ****
  157. --- 446,463 ----
  158.   
  159.   static    Arg    command_args[] = {
  160. + #ifdef HAVE_MOTIF
  161. +     {XmNlabelString,    (XtArgVal) NULL},
  162. + #else /* not HAVE_MOTIF */
  163.       {XtNlabel,    (XtArgVal) NULL},
  164. + #endif /* not HAVE_MOTIF */
  165.       {XtNx,        (XtArgVal) 6},
  166.       {XtNy,        (XtArgVal) 0},
  167.       {XtNwidth,    (XtArgVal) 64},
  168.       {XtNheight,    (XtArgVal) 30},
  169. + #ifdef HAVE_MOTIF
  170. +     {XmNactivateCallback,    (XtArgVal) command_call},
  171. + #else /* not HAVE_MOTIF */
  172.       {XtNcallback,    (XtArgVal) command_call},
  173. + #endif /* not HAVE_MOTIF */
  174.   };
  175.   
  176. ***************
  177. *** 420,434 ****
  178.       int i;
  179.   
  180. !     line_args[2].value = h;
  181. !     line_args[3].value = (XtArgVal) vport_widget;
  182.       line_widget = XtCreateManagedWidget("line", widgetClass, form_widget,
  183.           line_args, XtNumber(line_args));
  184.       panel_args[0].value = (XtArgVal) line_widget;
  185.       panel_args[2].value = h;
  186.       panel_widget = XtCreateManagedWidget("panel", compositeWidgetClass,
  187.           form_widget, panel_args, XtNumber(panel_args));
  188.   
  189.       command_args[2].value = (XtArgVal) vport_widget;
  190.       for (i = 0; i < XtNumber(command_table); ++i) {
  191.           command_args[0].value = (XtArgVal) command_table[i].label;
  192.           command_args[2].value = (XtArgVal) command_table[i].y_pos;
  193. --- 468,498 ----
  194.       int i;
  195.   
  196. !     line_args[0].value = h;
  197. !     line_args[1].value = (XtArgVal) vport_widget;
  198.       line_widget = XtCreateManagedWidget("line", widgetClass, form_widget,
  199.           line_args, XtNumber(line_args));
  200.       panel_args[0].value = (XtArgVal) line_widget;
  201.       panel_args[2].value = h;
  202. + #ifdef HAVE_MOTIF
  203. +     panel_widget = XtCreateManagedWidget("panel", xmBulletinBoardWidgetClass,
  204. +         form_widget, panel_args, XtNumber(panel_args));
  205. + #else /* not HAVE_MOTIF */
  206.       panel_widget = XtCreateManagedWidget("panel", compositeWidgetClass,
  207.           form_widget, panel_args, XtNumber(panel_args));
  208. + #endif /* not HAVE_MOTIF */
  209.   
  210.       command_args[2].value = (XtArgVal) vport_widget;
  211. + #ifdef HAVE_MOTIF
  212.       for (i = 0; i < XtNumber(command_table); ++i) {
  213. +         command_args[0].value = (XtArgVal) 
  214. +           XmCvtCTToXmString ((char *) command_table[i].label);
  215. +         command_args[2].value = (XtArgVal) command_table[i].y_pos;
  216. +         command_call[0].closure = (caddr_t) command_table[i].closure;
  217. +         (void) XtCreateManagedWidget(command_table[i].name,
  218. +         xmPushButtonWidgetClass, panel_widget,
  219. +         command_args, XtNumber(command_args));
  220. +     }
  221. + #else /* not HAVE_MOTIF */
  222. +     for (i = 0; i < XtNumber(command_table); ++i) {
  223.           command_args[0].value = (XtArgVal) command_table[i].label;
  224.           command_args[2].value = (XtArgVal) command_table[i].y_pos;
  225. ***************
  226. *** 438,441 ****
  227. --- 502,506 ----
  228.           command_args, XtNumber(command_args));
  229.       }
  230. + #endif /* not HAVE_MOTIF */
  231.   }
  232.   #endif    /* BUTTONS */
  233. ***************
  234. *** 1036,1040 ****
  235.   }
  236.   
  237. ! #ifdef    BUTTONS
  238.       /*ARGSUSED*/
  239.   static    void
  240. --- 1101,1105 ----
  241.   }
  242.   
  243. ! #if defined(BUTTONS) || defined(HAVE_MOTIF)
  244.       /*ARGSUSED*/
  245.   static    void
  246. ***************
  247. *** 1408,1411 ****
  248. --- 1473,1498 ----
  249.   }
  250.   
  251. + static void
  252. + set_shrink_factor(win, shrink)
  253. +      struct WindowRec * win;
  254. +      int shrink;
  255. + {
  256. + #ifdef HAVE_MOTIF
  257. +   static Widget active_shrink_button = 0;
  258. +   if (win->shrinkfactor != shrink || !active_shrink_button)
  259. +     {
  260. +       if (active_shrink_button)
  261. +     XmToggleButtonSetState (active_shrink_button, False, False);
  262. +       win->shrinkfactor = shrink;
  263. +       if (shrink <= max_shrink_button
  264. +       && (active_shrink_button = shrink_button[shrink]))
  265. +     XmToggleButtonSetState (active_shrink_button, True, False);
  266. +     }
  267. + #else /* not HAVE_MOTIF */
  268. +   win->shrinkfactor = shrink;
  269. + #endif /* not HAVE_MOTIF */
  270. + }
  271.   #ifdef    TOOLKIT
  272.       /*ARGSUSED*/
  273. ***************
  274. *** 1648,1652 ****
  275.           if (number0 <= 0) goto bad;
  276.           if (number0 == mane.shrinkfactor) return;
  277. !         mane.shrinkfactor = number0;
  278.           init_page();
  279.           if (number0 != 1 && number0 != bak_shrink) {
  280. --- 1735,1739 ----
  281.           if (number0 <= 0) goto bad;
  282.           if (number0 == mane.shrinkfactor) return;
  283. !         set_shrink_factor (&mane, number0);
  284.           init_page();
  285.           if (number0 != 1 && number0 != bak_shrink) {
  286. ***************
  287. *** 2746,2749 ****
  288. --- 2833,2902 ----
  289.    */
  290.   
  291. + static void
  292. + file_pulldown_callback (w, client_data, call_data)
  293. +      Widget w;
  294. +      XtPointer client_data;
  295. +      XtPointer call_data;
  296. + {
  297. +   switch ((int) client_data) {
  298. +   case 0:
  299. +     keystroke ('R', 0, False, 0);
  300. +     break;
  301. +   case 1:
  302. +     keystroke ('q', 0, False, 0);
  303. +     break;
  304. +   }
  305. + }
  306. + static void
  307. + navigate_pulldown_callback (w, client_data, call_data)
  308. +      Widget w;
  309. +      XtPointer client_data;
  310. +      XtPointer call_data;
  311. + {
  312. +   switch ((int) client_data) {
  313. +   case 0:
  314. +     keystroke ('p', 10, True, 0);
  315. +     break;
  316. +   case 1:
  317. +     keystroke ('p', 5, True, 0);
  318. +     break;
  319. +   case 2:
  320. +     keystroke ('p', 0, False, 0);
  321. +     break;
  322. +   case 5:
  323. +     keystroke ('n', 10, True, 0);
  324. +     break;
  325. +   case 4:
  326. +     keystroke ('n', 5, True, 0);
  327. +     break;
  328. +   case 3:
  329. +     keystroke ('n', 0, False, 0);
  330. +     break;
  331. +   }
  332. + }
  333. + static void
  334. + scale_pulldown_callback (w, client_data, call_data)
  335. +      Widget w;
  336. +      XtPointer client_data;
  337. +      XtPointer call_data;
  338. + {
  339. +   switch ((int) client_data) {
  340. +   case 0:
  341. +     keystroke ('s', 1, True, 0);
  342. +     break;
  343. +   case 1:
  344. +     keystroke ('s', 2, True, 0);
  345. +     break;
  346. +   case 2:
  347. +     keystroke ('s', 3, True, 0);
  348. +     break;
  349. +   case 3:
  350. +     keystroke ('s', 4, True, 0);
  351. +     break;
  352. +   }
  353. + }
  354.   int
  355.   main(argc, argv)
  356. ***************
  357. *** 2838,2842 ****
  358.           dvi_name == NULL) usage();
  359.       if (shrink_factor != 1) bak_shrink = shrink_factor;
  360. !     mane.shrinkfactor = shrink_factor;
  361.       if (RESOURCE(debug_arg) != NULL)
  362.           debug = isdigit(*RESOURCE(debug_arg)) ? atoi(RESOURCE(debug_arg))
  363. --- 2991,2995 ----
  364.           dvi_name == NULL) usage();
  365.       if (shrink_factor != 1) bak_shrink = shrink_factor;
  366. !     set_shrink_factor (&mane, shrink_factor);
  367.       if (RESOURCE(debug_arg) != NULL)
  368.           debug = isdigit(*RESOURCE(debug_arg)) ? atoi(RESOURCE(debug_arg))
  369. ***************
  370. *** 3012,3017 ****
  371. --- 3165,3175 ----
  372.   
  373.   #ifdef    BUTTONS
  374. + #ifdef HAVE_MOTIF
  375. +     form_widget = XtCreateManagedWidget("form", xmFormWidgetClass,
  376. +         top_level, form_args, XtNumber(form_args));
  377. + #else /* not HAVE_MOTIF */
  378.       form_widget = XtCreateManagedWidget("form", formWidgetClass,
  379.           top_level, form_args, XtNumber(form_args));
  380. + #endif /* not HAVE_MOTIF */
  381.   
  382.       line_args[0].value = (XtArgVal) resource.high_color
  383. ***************
  384. *** 3020,3026 ****
  385. --- 3178,3237 ----
  386.   #define    form_widget    top_level    /* for calls to XtAddEventHandler */
  387.   #endif    /* BUTTONS */
  388. + #ifdef HAVE_MOTIF
  389. +     vport_widget = XtCreateManagedWidget
  390. +       ("vport",
  391. +        xmMainWindowWidgetClass, form_widget,
  392. +        vport_args, XtNumber(vport_args));
  393. +     XtVaGetValues (vport_widget, XmNclipWindow, &clip_widget, NULL);
  394. +     menubar = XmVaCreateSimpleMenuBar
  395. +       (vport_widget, "menubar",
  396. +        XmVaCASCADEBUTTON, (XtArgVal) XmCvtCTToXmString("File"), 0, 
  397. +        XmVaCASCADEBUTTON, (XtArgVal) XmCvtCTToXmString("Navigate"), 0,
  398. +        XmVaCASCADEBUTTON, (XtArgVal) XmCvtCTToXmString("Scale"), 0,
  399. +        0);
  400. +     {
  401. +       XmVaCreateSimplePulldownMenu 
  402. +          (menubar, "file_pulldown", 0, file_pulldown_callback,
  403. +           XmNtearOffModel, (XtArgVal) XmTEAR_OFF_ENABLED,
  404. +           XmVaPUSHBUTTON, (XtArgVal) XmCvtCTToXmString("Reload"), 0, 0, 0,
  405. +           XmVaSEPARATOR,
  406. +           XmVaPUSHBUTTON, (XtArgVal) XmCvtCTToXmString("Quit"), 0, 0, 0,
  407. +           0);
  408. +     }
  409. +     {
  410. +       XmVaCreateSimplePulldownMenu 
  411. +         (menubar, "navigate_pulldown", 1, navigate_pulldown_callback,
  412. +          XmNtearOffModel, (XtArgVal) XmTEAR_OFF_ENABLED,
  413. +          XmVaPUSHBUTTON, (XtArgVal) XmCvtCTToXmString("Page-10"), 0, 0, 0,
  414. +          XmVaPUSHBUTTON, (XtArgVal) XmCvtCTToXmString("Page-5"), 0, 0, 0,
  415. +          XmVaPUSHBUTTON, (XtArgVal) XmCvtCTToXmString("Prev"), 0, 0, 0,
  416. +          XmVaSEPARATOR,
  417. +          XmVaPUSHBUTTON, (XtArgVal) XmCvtCTToXmString("Next"), 0, 0, 0,
  418. +          XmVaPUSHBUTTON, (XtArgVal) XmCvtCTToXmString("Page+5"), 0, 0, 0,
  419. +          XmVaPUSHBUTTON, (XtArgVal) XmCvtCTToXmString("Page+10"), 0, 0, 0,
  420. +          0);
  421. +     }
  422. +     {
  423. +       scale_menu = XmVaCreateSimplePulldownMenu 
  424. +         (menubar, "scale_pulldown", 2, scale_pulldown_callback,
  425. +          XmNradioBehavior, (XtArgVal) True,
  426. +          XmNtearOffModel, (XtArgVal) XmTEAR_OFF_ENABLED,
  427. +          XmVaRADIOBUTTON, (XtArgVal) XmCvtCTToXmString("Shrink1"), 0, 0, 0,
  428. +          XmVaRADIOBUTTON, (XtArgVal) XmCvtCTToXmString("Shrink2"), 0, 0, 0,
  429. +          XmVaRADIOBUTTON, (XtArgVal) XmCvtCTToXmString("Shrink3"), 0, 0, 0,
  430. +          XmVaRADIOBUTTON, (XtArgVal) XmCvtCTToXmString("Shrink4"), 0, 0, 0,
  431. +          0);
  432. +       shrink_button[1] = XtNameToWidget(scale_menu, "button_0");
  433. +       shrink_button[2] = XtNameToWidget(scale_menu, "button_1");
  434. +       shrink_button[3] = XtNameToWidget(scale_menu, "button_2");
  435. +       shrink_button[4] = XtNameToWidget(scale_menu, "button_3");
  436. +       max_shrink_button = 4;
  437. +       set_shrink_factor (&mane, mane.shrinkfactor);
  438. +     }
  439. + #else /* not HAVE_MOTIF */
  440.       vport_widget = XtCreateManagedWidget("vport", viewportWidgetClass,
  441.           form_widget, vport_args, XtNumber(vport_args));
  442.       clip_widget = XtNameToWidget(vport_widget, "clip");
  443. + #endif /* not HAVE_MOTIF */
  444.       draw_args[0].value = (XtArgVal) page_w;
  445.       draw_args[1].value = (XtArgVal) page_h;
  446. ***************
  447. *** 3030,3033 ****
  448. --- 3241,3248 ----
  449.       draw_widget = XtCreateManagedWidget("drawing", drawWidgetClass,
  450.           vport_widget, draw_args, XtNumber(draw_args));
  451. + #ifdef HAVE_MOTIF
  452. +     XmMainWindowSetAreas(vport_widget, menubar, 0, 0, 0, draw_widget);
  453. +     XtManageChild(menubar);
  454. + #endif /* HAVE_MOTIF */
  455.       {    /* set default window size */
  456.   #ifdef    BUTTONS